/**
 * 文章相关 API 工厂函数
 */

import type { AxiosInstance } from 'axios'
import type {
  Article,
  ArticleListResponse,
  ArticleQueryParams,
  ApiResponse,
} from '@/types/blog.types'

/**
 * 创建文章 API 对象
 * @param instance Axios 实例
 * @returns 文章 API 方法集合
 */
export function createArticleApi(instance: AxiosInstance) {
  return {
    /**
     * 获取文章列表
     * @param params 查询参数
     * @returns 文章列表响应
     */
    getArticles: (params?: ArticleQueryParams) =>
      instance.get<ArticleListResponse>('/articles', { params }),

    /**
     * 根据ID获取文章详情
     * @param id 文章ID
     * @returns 文章详情
     */
    getArticle: (id: string) => instance.get<ApiResponse<Article>>(`/article/${id}`),

    /**
     * 根据slug获取文章详情
     * @param slug 文章slug
     * @returns 文章详情
     */
    getArticleBySlug: (slug: string) => instance.get<ApiResponse<Article>>(`/article/${slug}`),

    /**
     * 更新文章
     * @param id 文章ID
     * @param data 更新数据
     * @returns 更新后的文章
     */
    updateArticle: (id: string, data: Partial<Article>) =>
      instance.put<Article>(`/articles/${id}`, data),
  }
}

export type ArticleApi = ReturnType<typeof createArticleApi>
